/**
 * 格式化时间
 * @param {string|Date} date 日期对象或日期字符串
 * @param {string} format 格式化模板，默认为 'YYYY-MM-DD HH:mm:ss'
 * @returns {string} 格式化后的时间字符串
 */
export function formatTime(date, format = 'YYYY-MM-DD HH:mm:ss') {
  if (!date) return ''

  const d = new Date(date)
  if (isNaN(d.getTime())) return ''

  const year = d.getFullYear()
  const month = String(d.getMonth() + 1).padStart(2, '0')
  const day = String(d.getDate()).padStart(2, '0')
  const hours = String(d.getHours()).padStart(2, '0')
  const minutes = String(d.getMinutes()).padStart(2, '0')
  const seconds = String(d.getSeconds()).padStart(2, '0')

  return format
      .replace('YYYY', year)
      .replace('MM', month)
      .replace('DD', day)
      .replace('HH', hours)
      .replace('mm', minutes)
      .replace('ss', seconds)
}

/**
 * 格式化金额
 * @param {number} amount 金额
 * @param {number} decimals 小数位数，默认为2
 * @returns {string} 格式化后的金额字符串
 */
export function formatAmount(amount, decimals = 2) {
  if (typeof amount !== 'number') return '0.00'
  return amount.toFixed(decimals)
}

/**
 * 格式化手机号
 * @param {string} phone 手机号
 * @returns {string} 格式化后的手机号，如：138****8888
 */
export function formatPhone(phone) {
  if (!phone || typeof phone !== 'string') return ''
  return phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2')
}

/**
 * 格式化邮箱
 * @param {string} email 邮箱
 * @returns {string} 格式化后的邮箱，如：a***@example.com
 */
export function formatEmail(email) {
  if (!email || typeof email !== 'string') return ''
  const [name, domain] = email.split('@')
  if (!name || !domain) return email
  return `${name.charAt(0)}***@${domain}`
}

/**
 * 格式化文件大小
 * @param {number} bytes 字节数
 * @returns {string} 格式化后的文件大小，如：1.5MB
 */
export function formatFileSize(bytes) {
  if (typeof bytes !== 'number' || bytes < 0) return '0B'

  const units = ['B', 'KB', 'MB', 'GB', 'TB']
  let size = bytes
  let unitIndex = 0

  while (size >= 1024 && unitIndex < units.length - 1) {
    size /= 1024
    unitIndex++
  }

  return `${size.toFixed(2)}${units[unitIndex]}`
}

/**
 * 格式化会员等级
 * @param {string} level 会员等级代码
 * @returns {string} 格式化后的会员等级名称
 */
export function formatMemberLevel(level) {
  const levelMap = {
    'NORMAL': '普通会员',
    'SILVER': '银卡会员',
    'GOLD': '金卡会员',
    'DIAMOND': '钻石会员'
  }
  return levelMap[level] || level
}

/**
 * 格式化订单状态
 * @param {string} status 订单状态代码
 * @returns {string} 格式化后的订单状态名称
 */
export function formatOrderStatus(status) {
  const statusMap = {
    'PENDING': '待付款',
    'PAID': '已付款',
    'SHIPPED': '已发货',
    'DELIVERED': '已送达',
    'COMPLETED': '已完成',
    'CANCELLED': '已取消'
  }
  return statusMap[status] || status
}

/**
 * 格式化商品状态
 * @param {string} status 商品状态代码
 * @returns {string} 格式化后的商品状态名称
 */
export function formatProductStatus(status) {
  const statusMap = {
    'ON_SALE': '在售',
    'SOLD_OUT': '售罄',
    'OFF_SHELF': '下架'
  }
  return statusMap[status] || status
}

/**
 * 只格式化日期（YYYY-MM-DD），用于生日等
 * @param {string|Date} date 日期对象或日期字符串
 * @returns {string} 只返回日期部分
 */
export function formatDate(date) {
  if (!date) return '';
  if (typeof date === 'string') return date.slice(0, 10);
  if (date instanceof Date) return date.toISOString().slice(0, 10);
  return '';
}